package us.proyecto.canarios.actions.concursos;

import static org.jboss.seam.ScopeType.SESSION;

import java.util.HashSet;
import java.util.List;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelectionIndex;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.log.Log;

import us.proyecto.canarios.dao.ConcursoDAO;
import us.proyecto.canarios.dao.DiccionarioDAO;
import us.proyecto.canarios.dao.PajarosDAO;
import us.proyecto.canarios.dao.UsuarioDAO;
import us.proyecto.canarios.domain.Asociacion;
import us.proyecto.canarios.domain.Concurso;
import us.proyecto.canarios.domain.Criador;
import us.proyecto.canarios.domain.Pajaro;
import us.proyecto.canarios.domain.Puntuacion;
import us.proyecto.canarios.domain.Tipo;
import us.proyecto.canarios.domain.Usuario;

@Name("gestionBD")
@Scope(ScopeType.SESSION)
public class ConsultaBDAction {

    @Logger
    Log log;

    private String numAnilla;
    private Tipo tipo;
    //private Criador criador;

	@In
	private Usuario user;

    private Concurso concurso;

    @In(create = true)
    private UsuarioDAO usuarioDAO;

    @DataModel("listaPajarosCriador")
    private List<Pajaro> listaPajarosCriador;
    @DataModelSelectionIndex("listaPajarosCriador")
    private int index;

    private List<Tipo> listaTipos;

    @In(create = true)
	private ConcursoDAO concursoDAO;

	@In(create = true)
	private DiccionarioDAO diccionariosDAO;

	@In(create = true)
	private PajarosDAO pajarosDAO;

	private String enVenta;

	private List<Criador> listaCriadores;

	private String minimo;

	private String maximo;

	private Criador criador;


    public void buscar() {
    	String where = "";
    	if(user.getCriador()!=null){
    		where = new String(" not p.criador.idCriador = " + user.getCriador().getIdCriador());
    	}else {
    		where = new String(" 1 = 1");
    	}
        if(numAnilla != null && !numAnilla.equals("")) {
        	where = where + " and upper(p.numAnilla) like upper('%" + numAnilla+"%') ";
        }
        if(tipo != null){
        	where = where + " and p.tipo.idTipo = "+ tipo.getIdTipo();
        }
        if(criador != null){
        	where = where + " and p.criador.idCriador ="+criador.getIdCriador();
        }
        if(enVenta!= null){
        	if(enVenta.equals("1")){
        		where = where + " and p.venta is not null and (p.vendido = false or p.vendido=null)";
        	}else if(enVenta.equals("2")){
        		where = where + " and p.venta is null or p.vendido = true";
        	}
        }
        String whereAux = "";
        Double min = null;
        if(minimo!= null && !minimo.equals("") && enVenta!=null && enVenta.equals("1")){
        	try{
        		min = Double.parseDouble(minimo);
        		whereAux = " and p.venta >= " + min;
        	}catch (NumberFormatException e) {
        		FacesMessages.instance().add("El precio mínimo debe ser un número válido");
			}
        }
        boolean seguir = true;
        if(maximo!= null && !maximo.equals("") && enVenta!=null && enVenta.equals("1")){
        	try{
        		Double max = Double.parseDouble(maximo);
        		if(min != null && min.doubleValue() > max.doubleValue()){
        			seguir = false;
        			FacesMessages.instance().add("El precio maximo no puede ser menor que el mínimo");
        		}

        		whereAux = whereAux + " and p.venta <= " + max;
        	}catch (NumberFormatException e) {
        		FacesMessages.instance().add("El precio máximo debe ser un número válido");
			}
        }

        if(seguir){
        	where = where + whereAux;
        	listaPajarosCriador = pajarosDAO.getListPajaroByWhere(where);
        	if(listaPajarosCriador == null || listaPajarosCriador.size()==0){
        		FacesMessages.instance().add("No hay pájaros que coincidan con los criterios introducidos");
        	}
        }
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public String traduce(String s){
        String res="";
        if(s.equals("true")){
            res="Si";
        }else{
            res="No";
        }
        return res;

    }


    @Begin(join = true, flushMode=FlushModeType.MANUAL)
    public String gestion() {
		listaTipos = diccionariosDAO.getListaTipos();
		numAnilla = "";
		criador = null;
		tipo = null;
		minimo = null;
		maximo = null;
		enVenta = null;
		listaCriadores = usuarioDAO.getCriadores();

		return "true";
	}

	public String getNumAnilla() {
		return numAnilla;
	}

	public void setNumAnilla(String numAnilla) {
		this.numAnilla = numAnilla;
	}

	public Tipo getTipo() {
		return tipo;
	}

	public void setTipo(Tipo tipo) {
		this.tipo = tipo;
	}


	public List<Pajaro> getListaPajarosCriador() {
		return listaPajarosCriador;
	}

	public void setListaPajarosCriador(List<Pajaro> listaPajaros) {
		this.listaPajarosCriador = listaPajaros;
	}


	public List<Tipo> getListaTipos() {
		return listaTipos;
	}

	public void setListaTipos(List<Tipo> listaTipos) {
		this.listaTipos = listaTipos;
	}

	public String getEnVenta() {
		return enVenta;
	}

	public void setEnVenta(String enVenta) {
		this.enVenta = enVenta;
	}

	public List<Criador> getListaCriadores() {
		return listaCriadores;
	}

	public void setListaCriadores(List<Criador> listaCriadores) {
		this.listaCriadores = listaCriadores;
	}

	public String getMinimo() {
		return minimo;
	}

	public void setMinimo(String minimo) {
		this.minimo = minimo;
	}

	public String getMaximo() {
		return maximo;
	}

	public void setMaximo(String maximo) {
		this.maximo = maximo;
	}

	public Criador getCriador() {
		return criador;
	}

	public void setCriador(Criador criador) {
		this.criador = criador;
	}





}

